Home » SQL & PL/SQL » SQL & PL/SQL » How to strip of characters
|
Re: How to strip off characters [message #31243 is a reply to message #31242] |
Thu, 17 June 2004 13:21 |
Art Metzer
Messages: 2480 Registered: December 2002
|
Senior Member |
|
|
SQL> CREATE TABLE t (x VARCHAR2(30));
Table created.
SQL> INSERT INTO t VALUES ('SKYBLUE/user1@abc.com');
SQL> INSERT INTO t VALUES ('user2@abc.com');
SQL> INSERT INTO t VALUES ('user3@abc.com');
SQL> INSERT INTO t VALUES ('SKYBLUE/user4@abc.com');
SQL> SELECT x
2 FROM t
3 /
X
------------------------------
SKYBLUE/user1@abc.com
user2@abc.com
user3@abc.com
SKYBLUE/user4@abc.com
SQL> <font color=blue>UPDATE t</font>
2 <font color=blue>SET x = SUBSTR(t.x</font>
3 <font color=blue> , INSTR(t.x,'/') + 1)</font>
4 <font color=blue>WHERE INSTR(t.x,'/') > 0</font>
5 /
2 rows updated.
SQL> SELECT x
2 FROM t
3 /
X
------------------------------
user1@abc.com
user2@abc.com
user3@abc.com
user4@abc.com
SQL>
|
|
|
|
|
Re: How to strip of characters [message #203894 is a reply to message #31242] |
Thu, 16 November 2006 20:54 |
aimy
Messages: 225 Registered: June 2006
|
Senior Member |
|
|
hi all..
what about if i want to remove '_bp28_sabah.data'
from this set of data
bill_recc_charges_bp28_sabah.data
cust_acct_status_bp28_sabah.data
cust_pay_adj_bp28_sabah.data
cust_acct_charges_bp28_sabah.data
cust_pay_adj_bp28_sabah.data
bill_recc_charges_bp28_sabah.data
cust_acct_status_bp28_sabah.data
bill_nrecc_charges_bp28_sabah.data
bill_serv_charges_bp28_sabah.data
bill_nrecc_charges_bp28_sabah.data
cust_acct_status_bp28_sabah.data
I've tried to apply the above solution but it substr it from the front.
How do I substr from back?
Thank you very much
|
|
|
|
Re: How to strip of characters [message #203935 is a reply to message #203922] |
Fri, 17 November 2006 00:27 |
aimy
Messages: 225 Registered: June 2006
|
Senior Member |
|
|
pravin3032 wrote on Fri, 17 November 2006 13:40 | try using like this query
SELECT REPLACE ('bill_recc_charges_bp28_sabah.data', '_bp28_sabah.data', '')
FROM DUAL;
|
wow!!
thanks a lot pravin!!!
so now.. i want to extend my question such that is there any way that i can use a placeholder for this..
this is because there are all 10 bps altogether i.e. bp01, bp04, bp07,.....,bp25 and bp28.
so, how do i set it so that all those 10 bps would be replaced in one shot!
i've tried..
SELECT distinct REPLACE (file_name, '_bp%_sabah.data', '') FROM rev_load_tbl
but it didn't work!
thanks in advanced
|
|
|
|
|
Re: How to strip of characters [message #203943 is a reply to message #31242] |
Fri, 17 November 2006 00:37 |
aimy
Messages: 225 Registered: June 2006
|
Senior Member |
|
|
another question..
is that possible to remove string which starts with some pattern.
for example in this case, all strings that need to be removed is starting with '_bp%'
so, is it possible?
|
|
|
Re: How to strip of characters [message #203963 is a reply to message #203935] |
Fri, 17 November 2006 02:06 |
pravin3032
Messages: 51 Registered: November 2006 Location: eARTH
|
Member |
|
|
i am surprise !
my solution raise so many questions to you.
check the query below it will solve ur prob.
[
Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0
Connected as test
SQL>
SQL> SELECT file_name FROM rev_load_tbl ;
file_name
--------------------------------------------------
cust_pay_adj_bp10_sabah.data
cust_acct_charges_bp28_sabah.data
cust_pay_adj_bp28_sabah.data
cust_acct_status_bp30_sabah.data
bill_recc_charges_bp28_sabah.data
cust_acct_status_bp28_sabah.data
bill_nrecc_charges_bp40_sabah.data
bill_serv_charges_bp28_sabah.data
bill_nrecc_charges_bp28_sabah.data
cust_acct_status_bp28_sabah.data
10 rows selected
SQL>
SQL>
SQL> SELECT SUBSTR (file_name, 1, (INSTR (file_name, '_bp') - 1))
FROM rev_load_tbl ;
SUBSTR(file_name,1,(INSTR(file_name,'_BP
--------------------------------------------------
cust_pay_adj
cust_acct_charges
cust_pay_adj
cust_acct_status
bill_recc_charges
cust_acct_status
bill_nrecc_charges
bill_serv_charges
bill_nrecc_charges
cust_acct_status
10 rows selected
SQL>
]
regards
pravin.
|
|
|
Re: How to strip of characters [message #203967 is a reply to message #31242] |
Fri, 17 November 2006 02:25 |
aimy
Messages: 225 Registered: June 2006
|
Senior Member |
|
|
thanks a lot again pravin. really appreciate.
honestly i don't rally understand your latest query but i believe that is the result that i want.
but now, let me just straight to the point i.e. the case that i am facing right now.
actually inside the rev_load_tbl there are merely filenames with two sets of prefix. The 1st one which ends something like _bp%_sabah.data, while the other one is 2006%.
the table is basically contains 3 main columns i.e. bill_period, file_name and sum_of_rows. so, my mission is actually to count(sum_of_rows) for this 6 tables group by month. bill_period is in the format of 'yyyymmbp'
so, i just want to take the 1st part of the filename which indicates the table_name:
bill_nrecc_charges
bill_recc_charges
bill_serv_charges
cust_acct_charges
cust_acct_status
cust_pay_adj
so, i need to use the function decode right? which is something like this
select substr(BLPERIOD,1,6), <function> as "table_name", count(NUM_OF_ROWS)
from rev_load_tbl;
so, how is that? since i cannot use placeholder in decode..
i'm so sorry if i'm bothering you so much.
thanks so much anyway.
|
|
|
|
|
Re: How to strip of characters [message #205396 is a reply to message #31242] |
Fri, 24 November 2006 08:41 |
pravisri
Messages: 10 Registered: March 2005 Location: Manchester
|
Junior Member |
|
|
The best SQL for the 1st issue is as follows
select SUBSTR(string_col,INSTR(string_col,'/') +1, LENGTH(string_col) - INSTR(string_col,'/') from TABLENAME
|
|
|
Re: How to strip of characters [message #205398 is a reply to message #31242] |
Fri, 24 November 2006 08:55 |
pravisri
Messages: 10 Registered: March 2005 Location: Manchester
|
Junior Member |
|
|
The best SQL for
what about if i want to remove '_bp28_sabah.data'
from this set of data
bill_recc_charges_bp28_sabah.data cust_acct_status_bp28_sabah.data
cust_pay_adj_bp28_sabah.data
is as follows
Assume a table KSR is created with one column string_col.
SELECT SUBSTR(string_col,1,(INSTR( string_col,'_bp28_sabah.data')) -1 ) from KSR
|
|
|
Re: How to strip of characters [message #205912 is a reply to message #203978] |
Tue, 28 November 2006 02:23 |
aimy
Messages: 225 Registered: June 2006
|
Senior Member |
|
|
pravin3032 wrote on Fri, 17 November 2006 17:22 | hi,
Can you provide here..
1. sample data from all three column of that table
2. output data how u want?
regards
pravin.
|
thanks pravin.
well, my previous problem has been solved. thank you so much.
but now, i have more complex query for the same table. basically, the table has 3 main columns i.e blperiod, filename and num_of_rows.
here is the sample data for the column filename:
CIN_BILLED_NONRECURR_CHARGES.20061001
CIN_BILLED_NONRECURR_CHARGES.20061101
CIN_BILLED_NONRECURR_CHARGES.20061201
CIN_BILLED_NONRECURR_CHARGES.20060101
TLX_CUST_ACCT_PAY_ADJ.20060301
TLX_CUST_ACCT_PAY_ADJ.20060401
TLX_CUST_ACCT_PAY_ADJ.20060501
TLX_CUST_ACCT_PAY_ADJ.20060601
MAY_CUST_ACCT_PAY_ADJ.20060401
MAY_CUST_ACCT_PAY_ADJ.20060501
MAY_CUST_ACCT_PAY_ADJ.20060601
MAY_CUST_ACCT_PAY_ADJ.20060701
CUST_ACCT_PAY_ADJ.200602-ICAMS
CUST_ACCT_PAY_ADJ.200603-ICAMS
CUST_ACCT_PAY_ADJ.200604-ICAMS
CUST_ACCT_PAY_ADJ.200605-ICAMS
CUST_ACCT_PAY_ADJ.200606-ICAMS
BILLED_NONRECURR_CHARGES.200610-WAMS
BILLED_RECURR_CHARGES.200610-WAMS
BILLED_SERVICE_CHARGES.200610-WAMS
CUSTOMER_ACCT_CHARGES.200609-WAMS
CUSTOMER_ACCT_CHARGES.200610-WAMS
CUST_ACCT_PAY_ADJ.200610-WAMS
CUST_ACCT_STATUS.200610-WAMS
IBBILLED_NONRECURR_CHARGES.200610-WAMS
IBBILLED_NONRECURR_CHARGES.200611-WAMS
IBBILLED_RECURR_CHARGES.200610-WAMS
IBBILLED_RECURR_CHARGES.200611-WAMS
So, my mission is to display statistics of num_of_rows which is grouped by 'MAY', 'TLX', 'CIN', 'WAMS', 'IBWAMS' and 'ICAMS'.
The output should be something like this:
SOURCE TABLE 01 02 03 04
------ ------------------------- ---------- ---------- ---------- ----------
COINS BILLED_NONRECURR_CHARGES 654 230 215 285
BILLED_RECURR_CHARGES 49342 12870 13182 16020
BILLED_SERVICE_CHARGES 12275 6357 6615 7113
CUSTOMER_ACCT_CHARGES 2850 571 642 738
CUST_ACCT_PAY_ADJ 818 839 1103 932
CUST_ACCT_STATUS 4571 4567 4627 4677
MAYPAC BILLED_NONRECURR_CHARGES 2 0 3
BILLED_RECURR_CHARGES 5477 5467 5481 5457
BILLED_SERVICE_CHARGES 1591 1587 1580 1587
CUSTOMER_ACCT_CHARGES 1172 1170 1162 1169
CUST_ACCT_PAY_ADJ 1085 1049 1068 1081
CUST_ACCT_STATUS 2065 2052 2052 2049
TELEX BILLED_NONRECURR_CHARGES 0 4 7
BILLED_RECURR_CHARGES 3426 3402 3365 3305
BILLED_SERVICE_CHARGES 1271 1321 1274 1234
CUSTOMER_ACCT_CHARGES 1219 1269 1222 1182
CUST_ACCT_PAY_ADJ 911 890 823 873
CUST_ACCT_STATUS 1828 1825 1777 1769
Actually the above output is the one which I've already managed to solved by using this script:
column TABLE format a25
column SOURCE format a6
break on SOURCE skip 1
set linesize 200
set pagesize 36
SELECT distinct
decode(substr(file_name,1,3), 'MAY', 'MAYPAC', 'CIN', 'COINS', 'TLX', 'TELEX', 'NONE') "SOURCE",
substr(file_name,5, (INSTR (file_name, '.200') -5)) "TABLE",
sum(decode (substr(file_name,-4,2), 01, num_of_rows, 000000000)) "01",
sum(decode (substr(file_name,-4,2), 02, num_of_rows, 000000000)) "02",
sum(decode (substr(file_name,-4,2), 03, num_of_rows, 000000000)) "03",
sum(decode (substr(file_name,-4,2), 04, num_of_rows, 000000000)) "04",
sum(decode (substr(file_name,-4,2), 05, num_of_rows, 000000000)) "05",
sum(decode (substr(file_name,-4,2), 06, num_of_rows, 000000000)) "06",
sum(decode (substr(file_name,-4,2), 07, num_of_rows, 000000000)) "07",
sum(decode (substr(file_name,-4,2), 08, num_of_rows, 000000000)) "08",
sum(decode (substr(file_name,-4,2), 09, num_of_rows, 000000000)) "09",
sum(decode (substr(file_name,-4,2), 10, num_of_rows, 000000000)) "10",
sum(decode (substr(file_name,-4,2), 11, num_of_rows, 000000000)) "11",
sum(decode (substr(file_name,-4,2), 12, num_of_rows, 000000000)) "12"
from rev_load_tbl
where substr(file_name,1,3) in ('MAY', 'CIN', 'TLX') and substr(file_name,-8,4) = '2006'
group by substr(file_name,1,3), substr(file_name,5, (INSTR (file_name, '.200') -5));
But how do I combine all of them together by using decode and using search pattern like '%test%'?
|
|
|
Re: How to strip of characters [message #205914 is a reply to message #31242] |
Tue, 28 November 2006 02:27 |
aimy
Messages: 225 Registered: June 2006
|
Senior Member |
|
|
I'm sorry for not be able to explain my problem clearly. My English is not that good and I'm sort of blank right now.
Anyway, I hope you really understand my point here. For file_name starting like 'MAY', 'CIN', 'TLX' it's easy to cater by using substr. But do I cut out those ICAMS and WAMS? And please also note that WAMS is actually divided into two, one of them has prefix-IB in front.
Thank you.
|
|
|
Re: How to strip of characters [message #205970 is a reply to message #205914] |
Tue, 28 November 2006 04:29 |
pravin3032
Messages: 51 Registered: November 2006 Location: eARTH
|
Member |
|
|
hi aimy
you may find this query useful here..
SELECT DECODE (SUBSTR (FILE_NAME, 1, 3),
'MAY', 'MAYPAC',
'CIN', 'COINS',
'TLX', 'TELEX',
'NONE'
) "SOURCE",
(CASE
WHEN ( FILE_NAME LIKE '%ICAMS%'
OR FILE_NAME LIKE '%WAMS%')
THEN SUBSTR (FILE_NAME, 1, (INSTR (FILE_NAME, '.200') - 1))
ELSE SUBSTR (FILE_NAME, 5, (INSTR (FILE_NAME, '.200') - 5))
END
) "Table"
FROM REV_LOAD_TBL;
regards
pravin
[Updated on: Tue, 28 November 2006 04:31] Report message to a moderator
|
|
|
Re: How to strip of characters [message #206118 is a reply to message #205970] |
Tue, 28 November 2006 18:40 |
aimy
Messages: 225 Registered: June 2006
|
Senior Member |
|
|
pravin3032 wrote on Tue, 28 November 2006 18:29 | hi aimy
you may find this query useful here..
SELECT DECODE (SUBSTR (FILE_NAME, 1, 3),
'MAY', 'MAYPAC',
'CIN', 'COINS',
'TLX', 'TELEX',
'NONE'
) "SOURCE",
(CASE
WHEN ( FILE_NAME LIKE '%ICAMS%'
OR FILE_NAME LIKE '%WAMS%')
THEN SUBSTR (FILE_NAME, 1, (INSTR (FILE_NAME, '.200') - 1))
ELSE SUBSTR (FILE_NAME, 5, (INSTR (FILE_NAME, '.200') - 5))
END
) "Table"
FROM REV_LOAD_TBL;
regards
pravin
|
Thanks pravin for help.
But that does not solve the issue. Actually, in addition to 'MAYPAC', 'TELEX' and 'COINS' as the source, I want another 3 sources i.e. 'WAMS', 'IBWAMS' and 'ICAMS'. So, how do I decode them altogether in one script since 'WAMS', 'IBWAMS' and 'ICAMS' cannot be easily substr to get the prefix.
I've tried something like
SELECT
decode(file_name),
like 'IB%', 'IBWAMS',
like '%WAMS', 'WAMS',
like '%ICAMS', 'ICAMS',
'NONE') "SOURCE"
from rev_load_tbl;
But as you might already guessed, I cannot use placeholders together with DECODE.
So, CASE might be a solution here, it's just that I'm not sure how do I do that together with decode.
I'll try. In the meantime, I hope you can try to help me.
Thanks a lot.
|
|
|
|
Re: How to strip of characters [message #206386 is a reply to message #31242] |
Wed, 29 November 2006 18:39 |
aimy
Messages: 225 Registered: June 2006
|
Senior Member |
|
|
I've tried using this query.. it seems to work and not work..
column TABLE format a26
column SOURCE format a6
break on SOURCE skip 1
set linesize 200
set pagesize 36
select distinct
(CASE
WHEN ( FILE_NAME LIKE 'IB%WAMS') THEN 'IBWAMS'
WHEN ( FILE_NAME LIKE '%ICAMS') THEN 'ICAMS'
ELSE 'WAMS'
end) as "SOURCE",
substr(file_name,1, (INSTR (file_name, '.200') -1)) "TABLE",
(CASE
WHEN ( FILE_NAME LIKE '%WAMS') THEN sum(decode (substr(file_name,-7,2), '10', num_of_rows, 000000000))
ELSE sum(decode (substr(file_name,-8,2), '10', num_of_rows, 000000000))
end) "10"
FROM REV_LOAD_TBL where file_name like '%-%' and file_name like '%2006%'
group by file_name, substr(file_name,1, (INSTR (file_name, '.200') -1));
The problem is that how do I group it by IBWAMS, ICAMS and WAMS? Since I cannot use the CASE statement together with group by. so I can only group by file_name.
|
|
|
Re: How to strip of characters [message #206457 is a reply to message #206386] |
Thu, 30 November 2006 02:33 |
JRowbottom
Messages: 5933 Registered: June 2006 Location: Sunny North Yorkshire, ho...
|
Senior Member |
|
|
I'm confused - why can't you group by CASE.
It works just fine for me.
SQL> select case when col = 1 then 1 else 9 end col
2 ,sum(val)
3 from (select 1 col, 2 val from dual union all
4 select 1 col, 3 val from dual union all
5 select 2 col, 1 val from dual union all
6 select 3 col, 2 val from dual union all
7 select 4 col, 3 val from dual)
8 group by case when col = 1 then 1 else 9 end;
COL SUM(VAL)
------------------------------ ------------------------------
1 5
9 6
|
|
|
Goto Forum:
Current Time: Thu Dec 26 14:02:22 CST 2024
|